class Graph:
	'''
	__init__(self, vertices):
		instantiates a new graph object with an (n*n) Adjacencies Matrix
		and a list of vertices
	'''
	def __init__(self, vertices):
		self.vertices = vertices
		self.__adjacencies = dict()
		for r in vertices:
			self.__adjacencies[r] = []

	'''
	add_edge(i, j):
		establishes an edge between u and r
	'''
	def add_edge(self, u, r):
		self.__adjacencies[u].append(r)

	'''
	del_edge(i, j):
		deletes an edge between u and r
	'''
	def del_edge(self, u, r):
		self.__adjacencies[u].remove(r)

	'''
	has_edge(i, j):
		checks if is there an edge between i and j
	'''
	def has_edge(self, u, r):
		return r in self.__adjacencies[u]

	'''
	adjacencies(self, u):
		return all vertices that goes out of vertice u
	'''
	def adjacencies(self, u):
		return self.__adjacencies[u]

	'''
	@property
	edges(self):
		return edges from a graph instance
	'''
	@property
	def edges(self):
		return self.__adjacencies
